package com.vxdata.utils.modules.fileListener.listener;

import com.vxdata.utils.modules.fileListener.service.IFileBase64Service;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.io.File;

/**
 * 项目启动时执行的方法
 *
 * @author daiguojun
 */
@Component
@Slf4j
public class MyApplicationRunner implements ApplicationRunner {

    //读取配置文件中了文件路径 拿到要监听的文件夹
    @Value("${base64.path}")
    private String path;

    //    // 自动注入业务服务
    @Autowired
    private IFileBase64Service listenerService;

    @Override
    public void run(ApplicationArguments args) {
        try {
            // 构造观察类主要提供要观察的文件或目录，当然还有详细信息的filter
            FileAlterationObserver observer = new FileAlterationObserver(new File(path));
            // 构造收听类
            FileListener listener = new FileListener(listenerService);
            // 为观察对象添加收听对象
            observer.addListener(listener);
            // 配置Monitor，第一个参数单位是毫秒，是监听间隔；第二个参数就是绑定我们之前的观察对象。
            FileAlterationMonitor fileMonitor = new FileAlterationMonitor(1000, new FileAlterationObserver[]{observer});
            // 启动监听
            fileMonitor.start();
        } catch (Exception e) {
            log.info("启动失败!");
            e.printStackTrace();
        }
    }
}
